// 它需要一个配置对象作为参数，通过对象的不同的属性来指定它的配置
import { createSlice } from '@reduxjs/toolkit'

// state的初始值
const initialState = {
    name: '莉莉',
    info: {
        sex: '男',
        age: 18
    }
}

export const studentSlice = createSlice({
    name: 'stu', // 命名空间，用来自动生成action中的type，name值会成为前缀；保证唯一，不重名
    initialState,
    reducers: { // 指定state的各种操作，直接在对象中添加方法
        // 可以通过不同的方法来指定对state的不同操作
        // 两个参数：state代理对象，可以直接修改；action操作的信息
        setName(state, action) {
            state.name = action.payload
        },
        setInfo(state, action) {
            state.info = action.payload
        }
    }
})

// 切片对象会【自动】的帮助我们生成action；切片对象存在属性actions
// actions中存储的是slice自动生成action创建器（函数），调用函数后会自动创建action对象
// action对象的结构 {type:name/函数名, payload:函数的参数}
export const { setName, setInfo } = studentSlice.actions
// const nameAction = setName('哈哈') // { type: 'stu/setName', payload: '哈哈'}
// const infoAction = setInfo({sex:'女',age:18}) // { type: 'stu/setInfo', payload: {sex:'女',age:18}}

// 简化useSelector使用，student来源于store里面配置的reducer
export const selectName = state => state.student.name
export const selectInfo = state => state.student.info

// 导出reducer在store里面使用
export default studentSlice.reducer
